#ifndef __HEAD_H__
#define __HEAD_H__

// 导入项目头文件
#include "user.h"
#include "flight.h"
#include "list.h"
#include "dlist.h"
#include "array.h"
#include "utils.h"
#include "ui.h"

// 导入系统头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "unistd.h"
#include <time.h>
#include <ncurses.h>
#include <locale.h>
#include <wchar.h>

// 定义宏定义

#define MAX 100 // 延时函数读秒

#define LOG_FILE "log/error.log"        // 报错日志文件
#define FLIGHTS_FILE "data/flights.txt" // 航班信息文件


// 定义用户信息文件路径
#define ADMIN_FILE "data/admin_users.txt"         // 管理员账户信息文件
#define REGULAR_FILE "data/regular_users.txt"     // 普通用户信息文件
#define SILVER_FILE "data/silver_members.txt"     // 银卡会员信息文件(9折)
#define GOLD_FILE "data/gold_members.txt"         // 金卡会员信息文件(8折)
#define PLATINUM_FILE "data/platinum_members.txt" // 白金会员信息文件(7折)
#define ALL_USER "data/all_user.txt"              // 所有用户信息文件

// 宏定义 用户账号等级
#define Reg "Regular"  // 普通用户
#define Sil "Silver"   // 银卡用户
#define Gol "Gold"     // 金卡用户
#define Pla "Plattnum" // 白金用户
#define Adm "Admin"    // 管理员

// 示例宏定义，可以用于获取折扣
#define SILVER_DISCOUNT 0.9   // 银卡会员折扣(9折)
#define GOLD_DISCOUNT 0.8     // 金卡会员折扣(8折)
#define PLATINUM_DISCOUNT 0.7 // 白金会员折扣(7折)

// 错误输出宏定义，写入日志文件并显示在终端
#define ERRLOG(msg)                                                                                                           \
    do                                                                                                                        \
    {                                                                                                                         \
        time_t now = time(NULL);                                                                                              \
        char *timestr = ctime(&now);                                                                                          \
        timestr[strlen(timestr) - 1] = '\0'; /* 去掉末尾的换行符 */                                                   \
        FILE *log_file = fopen(LOG_FILE, "a");                                                                                \
        if (log_file)                                                                                                         \
        {                                                                                                                     \
            fprintf(log_file, "[%s] 错误: %s\t文件: %s\t函数: %s\t行号: %d\n\n", timestr, msg, __FILE__, __func__, __LINE__); \
            fclose(log_file);                                                                                                 \
        }                                                                                                                     \
        else                                                                                                                  \
        {                                                                                                                     \
            fprintf(stderr, "错误: 无法打开日志文件: %s\n", LOG_FILE);                                                        \
        } /* 输出到标准错误流 */                                                                                      \
        fprintf(stderr, "[%s] 错误: %s\t文件: %s\t函数: %s\t行号: %d\n", timestr, msg, __FILE__, __func__, __LINE__);         \
    } while (0)

#endif
